A database may process a query that seeks out stored information. Searching a database for stored information may become inefficient as the quantity of stored information increases beyond certain levels. Thus, the information may be indexed in an attempt to improve search efficiency and response time. Conventional systems may index information using tokens that may appear in queries. However, as the index grows in size and/or becomes fragmented, searching for information may once again become inefficient and time consuming.
Thus, conventional systems may optimize a token(s) and/or index in an attempt to improve efficiency and response time. However, as the number of tokens increases it may become uneconomical to optimize all tokens. Similarly, as the size of the index grows, it may become uneconomical to optimize the entire index. Conventional systems may also de-fragment an index in an attempt to improve efficiency and response time. However, de-fragmenting an entire index may consume undesired amounts of system resources (e.g., memory, processor cycles). Conventional systems may even calculate index fragmentation data to decide whether to de-fragment an index. However, performing this calculation may also consume undesired amounts of system resources.
Having addressed the organization side (e.g., indexes) of query processing, some conventional systems may also optimize search requests in an attempt to further improve efficiency and response time. However, these conventional systems may optimize all search requests and/or a user-selected set of search requests, which once again may consume undesired amounts of system resources while producing only marginal performance gains on potentially irrelevant queries.